// 判断字符串的两半是否相似
/*给你一个偶数长度的字符串 s 。将其拆分成长度相同的两半，前一半为 a ，后一半为 b 。

两个字符串 相似 的前提是它们都含有相同数目的元音（'a'，'e'，'i'，'o'，'u'，'A'，'E'，'I'，'O'，'U'）。注意，s 可能同时含有大写和小写字母。

如果 a 和 b 相似，返回 true ；否则，返回 false 。
2 <= s.length <= 1000
s.length 是偶数
s 由 大写和小写 字母组成
*/
bool halvesAreAlike(char* s) {
    int size = strlen(s);
    int mid = size / 2;
    int hash[58] = {0};
    for (int i = 0; i < mid; i++) {
        hash[s[i] - 'A']++;
    }
    for (int i = mid; i < size; i++) {
        hash[s[i] - 'A']--;
    }
    char arr[11] = {"aeiouAEIOU"};
    int sum = 0;
    for (int i = 0; i < 10; i++) {
        sum += hash[arr[i] - 'A'];
    }
    if(sum)
    return false;
    return true;
}


//找出两数组的不同
/*给你两个下标从 0 开始的整数数组 nums1 和 nums2 ，请你返回一个长度为 2 的列表 answer ，其中：

answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整数组成的列表。
answer[1] 是 nums2 中所有 不 存在于 nums1 中的 不同 整数组成的列表。
注意：列表中的整数可以按 任意 顺序返回。
1 <= nums1.length, nums2.length <= 1000
-1000 <= nums1[i], nums2[i] <= 1000
*/
/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume
 * caller calls free().
 */
int compare(const void* q1, const void* q2) {
    return (*((int*)(q1)) - *((int*)(q2)));
}
int** findDifference(int* nums1, int nums1Size, int* nums2, int nums2Size,
                     int* returnSize, int** returnColumnSizes) {
    *returnSize = 2;
    int** answer = (int**)malloc(sizeof(int*) * 2);
    answer[0] = (int*)malloc(sizeof(int) * nums1Size);
    answer[1] = (int*)malloc(sizeof(int) * nums2Size);
    qsort(nums1, nums1Size, sizeof(int), compare);
    qsort(nums2, nums2Size, sizeof(int), compare);
    int index1 = 0;
    int index2 = 0;
    int new_index1 = 0;
    int new_index2 = 0;
    while (index1 < nums1Size && index2 < nums2Size) {
        if (nums1[index1] == nums2[index2]) {
            index1++;
            index2++;
        } else if (nums1[index1] < nums2[index2]) {
            answer[0][new_index1] = nums1[index1];
            new_index1++;
            index1++;
        } else {
            answer[1][new_index2] = nums2[index2];
            new_index2++;
            index2++;
        }
        while (index1 > 0 && index1 < nums1Size &&
               nums1[index1] == nums1[index1 - 1]) {
            index1++;
        }
        while (index2 > 0 && index2 < nums2Size &&
               nums2[index2] == nums2[index2 - 1]) {
            index2++;
        }
    }
    while (index1 < nums1Size) {
        answer[0][new_index1] = nums1[index1];
        new_index1++;
        index1++;
        while (index1 < nums1Size && nums1[index1] == nums1[index1 - 1]) {
            index1++;
        }
    }
    while (index2 < nums2Size) {
        answer[1][new_index2] = nums2[index2];
        new_index2++;
        index2++;
        while (index2 < nums2Size && nums2[index2] == nums2[index2 - 1]) {
            index2++;
        }
    }
    int* col = (int*)malloc(sizeof(int) * 2);
    col[0] = new_index1;
    col[1] = new_index2;
    *returnColumnSizes = col;
    return answer;
}